/**
 * Copyright 2021 Tianmian Tech. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.welab.wefe.union.service.contract;

import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.*;
import org.fisco.bcos.sdk.abi.datatypes.generated.Int256;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple7;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.eventsub.EventCallback;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

@SuppressWarnings("unchecked")
public class DataSetMemberPermissionContract extends Contract {
    public static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b506110016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356004b6a6040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040162000101919062000296565b602060405180830381600087803b1580156200011c57600080fd5b505af115801562000131573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000157919081019062000174565b5062000340565b60006200016c8251620002ef565b905092915050565b6000602082840312156200018757600080fd5b600062000197848285016200015e565b91505092915050565b6000620001ad82620002e4565b808452620001c3816020860160208601620002f9565b620001ce816200032f565b602085010191505092915050565b6000600682527f6669785f696400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000604482527f69642c646174615f7365745f69642c6d656d6265725f69642c6372656174656460208301527f5f74696d652c757064617465645f74696d652c6c6f675f74696d652c6578745f60408301527f6a736f6e000000000000000000000000000000000000000000000000000000006060830152608082019050919050565b60006060820190508181036000830152620002b28184620001a0565b90508181036020830152620002c781620001dc565b90508181036040830152620002dc8162000213565b905092915050565b600081519050919050565b6000819050919050565b60005b8381101562000319578082015181840152602081019050620002fc565b8381111562000329576000848401525b50505050565b6000601f19601f8301169050919050565b61427c80620003506000396000f30060806040526004361061008d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680629740861461009257806326b477fd146100d05780634d3d096b1461010e57806353befd7a1461014b578063857cb0eb14610189578063a1db3508146101b5578063c843e4d7146101f2578063f716d9e51461022f575b600080fd5b34801561009e57600080fd5b506100b960048036036100b49190810190613789565b61026c565b6040516100c7929190613c3d565b60405180910390f35b3480156100dc57600080fd5b506100f760048036036100f29190810190613789565b61069e565b604051610105929190613c3d565b60405180910390f35b34801561011a57600080fd5b5061013560048036036101309190810190613789565b610ad0565b6040516101429190613c07565b60405180910390f35b34801561015757600080fd5b50610172600480360361016d919081019061374d565b610e94565b604051610180929190613c3d565b60405180910390f35b34801561019557600080fd5b5061019e6112ca565b6040516101ac929190613c3d565b60405180910390f35b3480156101c157600080fd5b506101dc60048036036101d7919081019061380b565b61166e565b6040516101e99190613c22565b60405180910390f35b3480156101fe57600080fd5b506102196004803603610214919081019061380b565b611e78565b6040516102269190613c22565b60405180910390f35b34801561023b57600080fd5b5061025660048036036102519190810190613789565b612699565b6040516102639190613c22565b60405180910390f35b6000606060008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016103209190613d6e565b602060405180830381600087803b15801561033a57600080fd5b505af115801561034e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061037291908101906136fb565b92508273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156103d857600080fd5b505af11580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104109190810190613680565b91508173ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016104679190613e4e565b600060405180830381600087803b15801561048157600080fd5b505af1158015610495573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663e8434e396040805190810160405280600a81526020017f6669785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610525929190613d90565b602060405180830381600087803b15801561053f57600080fd5b505af1158015610553573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061057791908101906136a9565b90508073ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156105dd57600080fd5b505af11580156105f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106159190810190613724565b60001415610683577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600060405190808252806020026020018201604052801561067357816020015b606081526020019060019003908161065e5790505b5081915080905094509450610696565b600061068e82612a24565b819150945094505b505050915091565b6000606060008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016107529190613d6e565b602060405180830381600087803b15801561076c57600080fd5b505af1158015610780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107a491908101906136fb565b92508273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561080a57600080fd5b505af115801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108429190810190613680565b91508173ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016108999190614025565b600060405180830381600087803b1580156108b357600080fd5b505af11580156108c7573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663e8434e396040805190810160405280600a81526020017f6669785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610957929190613d90565b602060405180830381600087803b15801561097157600080fd5b505af1158015610985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109a991908101906136a9565b90508073ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610a0f57600080fd5b505af1158015610a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a479190810190613724565b60001415610ab5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000604051908082528060200260200182016040528015610aa557816020015b6060815260200190600190039081610a905790505b5081915080905094509450610ac8565b6000610ac082612a24565b819150945094505b505050915091565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610b819190613d6e565b602060405180830381600087803b158015610b9b57600080fd5b505af1158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bd391908101906136fb565b92508273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610c3957600080fd5b505af1158015610c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c719190810190613680565b91508173ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1866040518263ffffffff167c0100000000000000000000000000000000000000", "000000000000000000028152600401610cc89190614025565b600060405180830381600087803b158015610ce257600080fd5b505af1158015610cf6573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663e8434e396040805190810160405280600a81526020017f6669785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610d86929190613d90565b602060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dd891908101906136a9565b905060008173ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610e4057600080fd5b505af1158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e789190810190613724565b1115610e875760019350610e8c565b600093505b505050919050565b6000606060008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610f489190613d6e565b602060405180830381600087803b158015610f6257600080fd5b505af1158015610f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f9a91908101906136fb565b92508273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561100057600080fd5b505af1158015611014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110389190810190613680565b91508173ffffffffffffffffffffffffffffffffffffffff16637ec1cc6588886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611091929190613c6d565b600060405180830381600087803b1580156110ab57600080fd5b505af11580156110bf573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663e8434e396040805190810160405280600a81526020017f6669785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161114f929190613d90565b602060405180830381600087803b15801561116957600080fd5b505af115801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111a191908101906136a9565b90508073ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561120757600080fd5b505af115801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061123f9190810190613724565b600014156112ad577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600060405190808252806020026020018201604052801561129d57816020015b60608152602001906001900390816112885790505b50819150809050945094506112c0565b60006112b882612a24565b819150945094505b5050509250929050565b600060606000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161137c9190613d6e565b602060405180830381600087803b15801561139657600080fd5b505af11580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113ce91908101906136fb565b91508173ffffffffffffffffffffffffffffffffffffffff1663e8434e396040805190810160405280600a81526020017f6669785f69645f303033000000000000000000000000000000000000000000008152508473ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561148657600080fd5b505af115801561149a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114be9190810190613680565b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016114f7929190613d90565b602060405180830381600087803b15801561151157600080fd5b505af1158015611525573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061154991908101906136a9565b90508073ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156115af57600080fd5b505af11580156115c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115e79190810190613724565b60001415611655577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600060405190808252806020026020018201604052801561164557816020015b60608152602001906001900390816116305790505b5081915080905093509350611668565b600061166082612a24565b819150935093505b50509091565b600080600080600080600094506116848d610ad0565b151561171a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94507fc14b935603e398b2024d314b5155b8507ec77056d2195ab98fa7e18af0a67e20858e8e8e8e8e8e8e6040516116ea989796959493929190613cc6565b60405180910390a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550611e68565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016117c59190613d6e565b602060405180830381600087803b1580156117df57600080fd5b505af11580156117f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061181791908101906136fb565b93508373ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561187d57600080fd5b505af1158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118b59190810190613680565b92508273ffffffffffffffffffffffffffffffffffffffff1663cd30a1d18e6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161190c9190614025565b600060405180830381600087803b15801561192657600080fd5b505af115801561193a573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119da91908101906136d2565b91508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168d6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611a319190613ea3565b600060405180830381600087803b158015611a4b57600080fd5b505af1158015611a5f573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168c6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611ab89190613e4e565b600060405180830381600087803b158015611ad257600080fd5b505af1158015611ae6573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611b3f919061407a565b600060405180830381600087803b158015611b5957600080fd5b505af1158015611b6d573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611bc69190613fd0565b600060405180830381600087803b158015611be057600080fd5b505af1158015611bf4573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16632ef8ba74896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611c4d9190613f82565b600060405180830381600087803b158015611c6757600080fd5b505af1158015611c7b573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516886040518263ffffffff167c0100000000000000", "000000000000000000000000000000000000000000028152600401611cd49190613ef8565b600060405180830381600087803b158015611cee57600080fd5b505af1158015611d02573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663bf2b70a16040805190810160405280600a81526020017f6669785f69645f3030330000000000000000000000000000000000000000000081525084866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611d9493929190613df0565b602060405180830381600087803b158015611dae57600080fd5b505af1158015611dc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611de69190810190613724565b9050600181121515611dfb5760009450611e1f565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe94505b7fc14b935603e398b2024d314b5155b8507ec77056d2195ab98fa7e18af0a67e20858e8e8e8e8e8e8e604051611e5c989796959493929190613cc6565b60405180910390a18095505b5050505050979650505050505050565b6000806000806000809350611e8c8c610ad0565b15611f21577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93507fc0d844becfcc141ed1bcf48131982727784ed6435ca8f53352fd7f9b89b951c9848d8d8d8d8d8d8d604051611ef1989796959493929190613cc6565b60405180910390a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff945061268a565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611fcc9190613d6e565b602060405180830381600087803b158015611fe657600080fd5b505af1158015611ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061201e91908101906136fb565b92508273ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561208457600080fd5b505af1158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120bc91908101906136d2565b91508173ffffffffffffffffffffffffffffffffffffffff1663e942b5166040805190810160405280600a81526020017f6669785f69645f303033000000000000000000000000000000000000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016121489190613f2d565b600060405180830381600087803b15801561216257600080fd5b505af1158015612176573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168d6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016121cf9190614025565b600060405180830381600087803b1580156121e957600080fd5b505af11580156121fd573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168c6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016122569190613ea3565b600060405180830381600087803b15801561227057600080fd5b505af1158015612284573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016122dd9190613e4e565b600060405180830381600087803b1580156122f757600080fd5b505af115801561230b573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612364919061407a565b600060405180830381600087803b15801561237e57600080fd5b505af1158015612392573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016123eb9190613fd0565b600060405180830381600087803b15801561240557600080fd5b505af1158015612419573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16632ef8ba74886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016124729190613f82565b600060405180830381600087803b15801561248c57600080fd5b505af11580156124a0573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016124f99190613ef8565b600060405180830381600087803b15801561251357600080fd5b505af1158015612527573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff166331afac366040805190810160405280600a81526020017f6669785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016125b7929190613dc0565b602060405180830381600087803b1580156125d157600080fd5b505af11580156125e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126099190810190613724565b9050600181141561261d5760009350612641565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe93505b7fc0d844becfcc141ed1bcf48131982727784ed6435ca8f53352fd7f9b89b951c9848d8d8d8d8d8d8d60405161267e989796959493929190613cc6565b60405180910390a18094505b50505050979650505050505050565b60008060008060008093506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161274f9190613d6e565b602060405180830381600087803b15801561276957600080fd5b505af115801561277d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127a191908101906136fb565b92508273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561280757600080fd5b505af115801561281b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061283f9190810190613680565b91508173ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016128969190613ea3565b600060405180830381600087803b1580156128b057600080fd5b505af11580156128c4573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff166328bb21176040805190810160405280600a81526020017f6669785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612954929190613d90565b602060405180830381600087803b15801561296e57600080fd5b505af1158015612982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129a69190810190613724565b90506001811215156129bb57600093506129df565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe93505b7fe09f4966609778cce39c8e76b023c6fdcfdc04aec687aabf43f58e8084ddb9528487604051612a10929190613c96565b60405180910390a180945050505050919050565b60608060008060608573ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612a9057600080fd5b505af1158015612aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ac89190810190613724565b604051908082528060200260200182016040528015612afb57816020015b6060815260200190600190039081612ae65790505b509350600092505b8573ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612b6757600080fd5b505af1158015612b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b9f9190810190613724565b83121561331b578573ffffffffffffffffffffffffffffffffffffffff1663846719e0846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612bfb9190613c22565b602060405180830381600087803b158015612c1557600080fd5b505af1158015612c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c4d91908101906136d2565b9150612d3f612d048373ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612ca890614005565b60006040518083", "0381600087803b158015612cc257600080fd5b505af1158015612cd6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612cff91908101906137ca565b613327565b6040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613380565b9050612dfc81612df78473ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612d9b90613e83565b600060405180830381600087803b158015612db557600080fd5b505af1158015612dc9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612df291908101906137ca565b613327565b613380565b9050612e3d816040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613380565b9050612efa81612ef58473ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612e9990613e2e565b600060405180830381600087803b158015612eb357600080fd5b505af1158015612ec7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612ef091908101906137ca565b613327565b613380565b9050612f3b816040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613380565b9050612ff881612ff38473ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612f979061405a565b600060405180830381600087803b158015612fb157600080fd5b505af1158015612fc5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612fee91908101906137ca565b613327565b613380565b9050613039816040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613380565b90506130f6816130f18473ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161309590613fb0565b600060405180830381600087803b1580156130af57600080fd5b505af11580156130c3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506130ec91908101906137ca565b613327565b613380565b9050613137816040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613380565b90506131f4816131ef8473ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161319390613f62565b600060405180830381600087803b1580156131ad57600080fd5b505af11580156131c1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506131ea91908101906137ca565b613327565b613380565b9050613235816040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613380565b90506132f2816132ed8473ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161329190613ed8565b600060405180830381600087803b1580156132ab57600080fd5b505af11580156132bf573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506132e891908101906137ca565b613327565b613380565b905080848481518110151561330357fe5b90602001906020020181905250826001019250612b03565b83945050505050919050565b6060600061333483613551565b1415613377576040805190810160405280600181526020017f2000000000000000000000000000000000000000000000000000000000000000815250905061337b565b8190505b919050565b606080606080606060008088955087945084518651016040519080825280601f01601f1916602001820160405280156133c85781602001602082028038833980820191505090505b50935083925060009150600090505b855181101561348a5785818151811015156133ee57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561344d57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506133d7565b600090505b84518110156135425784818151811015156134a657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561350557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061348f565b83965050505050505092915050565b600081519050919050565b60006135688251614179565b905092915050565b600061357c825161418b565b905092915050565b6000613590825161419d565b905092915050565b60006135a482516141af565b905092915050565b60006135b882356141c1565b905092915050565b60006135cc82516141c1565b905092915050565b600082601f83011215156135e757600080fd5b81356135fa6135f5826140dc565b6140af565b9150808252602083016020830185838301111561361657600080fd5b6136218382846141ef565b50505092915050565b600082601f830112151561363d57600080fd5b815161365061364b826140dc565b6140af565b9150808252602083016020830185838301111561366c57600080fd5b6136778382846141fe565b50505092915050565b60006020828403121561369257600080fd5b60006136a08482850161355c565b91505092915050565b6000602082840312156136bb57600080fd5b60006136c984828501613570565b91505092915050565b6000602082840312156136e457600080fd5b60006136f284828501613584565b91505092915050565b60006020828403121561370d57600080fd5b600061371b84828501613598565b91505092915050565b60006020828403121561373657600080fd5b6000613744848285016135c0565b91505092915050565b6000806040838503121561376057600080fd5b600061376e858286016135ac565b925050602061377f858286016135ac565b9150509250929050565b60006020828403121561379b57600080fd5b600082013567ffffffffffffffff8111156137b557600080fd5b6137c1848285016135d4565b91505092915050565b6000602082840312156137dc57600080fd5b600082015167ffffffffffffffff8111156137f657600080fd5b6138028482850161362a565b91505092915050565b600080600080600080600060e0888a03121561382657600080fd5b600088013567ffffffffffffffff81111561384057600080fd5b61384c8a828b016135d4565b975050602088013567ffffffffffffffff81111561386957600080fd5b6138758a828b016135d4565b965050604088013567ffffffffffffffff81111561389257600080fd5b61389e8a828b016135d4565b955050606088013567ffffffffffffffff8111156138bb57600080fd5b6138c78a828b016135d4565b945050608088013567ffffffffffffffff8111156138e457600080fd5b6138f08a828b016135d4565b93505060a06139018a828b016135ac565b92505060c088013567ffffffffffffffff81111561391e57600080fd5b61392a8a828b016135d4565b91505092959891949750929550565b600061394482614115565b8084526020840193508360208202850161395d85614108565b60005b84811015613996578383038852613978838351613a19565b925061398382614136565b9150602088019750600181019050613960565b508196508694505050505092915050565b6139b081614163565b82525050565b6139bf816141cb565b82525050565b6139ce816141dd565b82525050565b6139dd8161416f565b82525050565b60006139ee8261412b565b808452613a028160208601602086016141fe565b613a0b81614231565b602085010191505092915050565b6000613a2482614120565b808452613a388160208601602086016141fe565b613a4181614231565b602085010191505092915050565b6000600982527f6d656d6265725f696400000000000000000000000000000000000000000000006020830152604082019050919050565b6000600b82527f646174615f7365745f69640000000000000000000000000000000000000000006020830152604082019050919050565b6000600882527f6578745f6a736f6e0000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600682527f6669785f696400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600882527f6c6f675f74696d650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600c82527f757064617465645f74696d6500000000000000000000000000000000000000006020830152604082019050919050565b6000600282527f69640000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600c82527f637265617465645f74696d6500000000000000000000000000000000000000006020830152604082019050919050565b6000602082019050613c1c60008301846139a7565b92915050565b6000602082019050613c3760008301846139d4565b92915050565b6000604082019050613c5260008301856139d4565b8181036020830152613c648184613939565b90509392505050565b6000604082019050613c8260008301856139d4565b613c8f60208301846139d4565b9392505050565b6000604082019050613cab60008301856139d4565b81810360", "20830152613cbd81846139e3565b90509392505050565b600061010082019050613cdc600083018b6139d4565b8181036020830152613cee818a6139e3565b90508181036040830152613d0281896139e3565b90508181036060830152613d1681886139e3565b90508181036080830152613d2a81876139e3565b905081810360a0830152613d3e81866139e3565b9050613d4d60c08301856139d4565b81810360e0830152613d5f81846139e3565b90509998505050505050505050565b60006020820190508181036000830152613d888184613a19565b905092915050565b60006040820190508181036000830152613daa8185613a19565b9050613db960208301846139b6565b9392505050565b60006040820190508181036000830152613dda8185613a19565b9050613de960208301846139c5565b9392505050565b60006060820190508181036000830152613e0a8186613a19565b9050613e1960208301856139c5565b613e2660408301846139b6565b949350505050565b60006020820190508181036000830152613e4781613a4f565b9050919050565b60006040820190508181036000830152613e6781613a4f565b90508181036020830152613e7b81846139e3565b905092915050565b60006020820190508181036000830152613e9c81613a86565b9050919050565b60006040820190508181036000830152613ebc81613a86565b90508181036020830152613ed081846139e3565b905092915050565b60006020820190508181036000830152613ef181613abd565b9050919050565b60006040820190508181036000830152613f1181613abd565b90508181036020830152613f2581846139e3565b905092915050565b60006040820190508181036000830152613f4681613af4565b90508181036020830152613f5a8184613a19565b905092915050565b60006020820190508181036000830152613f7b81613b2b565b9050919050565b60006040820190508181036000830152613f9b81613b2b565b9050613faa60208301846139d4565b92915050565b60006020820190508181036000830152613fc981613b62565b9050919050565b60006040820190508181036000830152613fe981613b62565b90508181036020830152613ffd81846139e3565b905092915050565b6000602082019050818103600083015261401e81613b99565b9050919050565b6000604082019050818103600083015261403e81613b99565b9050818103602083015261405281846139e3565b905092915050565b6000602082019050818103600083015261407381613bd0565b9050919050565b6000604082019050818103600083015261409381613bd0565b905081810360208301526140a781846139e3565b905092915050565b6000604051905081810181811067ffffffffffffffff821117156140d257600080fd5b8060405250919050565b600067ffffffffffffffff8211156140f357600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600061418482614143565b9050919050565b600061419682614143565b9050919050565b60006141a882614143565b9050919050565b60006141ba82614143565b9050919050565b6000819050919050565b60006141d682614143565b9050919050565b60006141e882614143565b9050919050565b82818337600083830152505050565b60005b8381101561421c578082015181840152602081019050614201565b8381111561422b576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820085ab76d8fde62499a3ccfa08cfe1c21d3f1cb32ac9cef476d84bfb3328e99f56c6578706572696d656e74616cf50037"};

    public static final String BINARY = String.join("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"60806040523480156200001157600080fd5b506110016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c92a78016040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040162000101919062000296565b602060405180830381600087803b1580156200011c57600080fd5b505af115801562000131573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000157919081019062000174565b5062000340565b60006200016c8251620002ef565b905092915050565b6000602082840312156200018757600080fd5b600062000197848285016200015e565b91505092915050565b6000620001ad82620002e4565b808452620001c3816020860160208601620002f9565b620001ce816200032f565b602085010191505092915050565b6000604482527f69642c646174615f7365745f69642c6d656d6265725f69642c6372656174656460208301527f5f74696d652c757064617465645f74696d652c6c6f675f74696d652c6578745f60408301527f6a736f6e000000000000000000000000000000000000000000000000000000006060830152608082019050919050565b6000600682527f6669785f696400000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006060820190508181036000830152620002b28184620001a0565b90508181036020830152620002c7816200025f565b90508181036040830152620002dc81620001dc565b905092915050565b600081519050919050565b6000819050919050565b60005b8381101562000319578082015181840152602081019050620002fc565b8381111562000329576000848401525b50505050565b6000601f19601f8301169050919050565b61427d80620003506000396000f30060806040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e2f659d146100935780631228fe19146100d05780632a5f68ed1461010d5780634f37e6e51461014a578063568fe885146101885780636342fe7b146101c5578063c181ca3614610203578063e5dc35701461022f575b600080fd5b34801561009f57600080fd5b506100ba60048036036100b5919081019061378a565b61026d565b6040516100c79190613c23565b60405180910390f35b3480156100dc57600080fd5b506100f760048036036100f2919081019061380c565b6105f8565b6040516101049190613c23565b60405180910390f35b34801561011957600080fd5b50610134600480360361012f919081019061380c565b610e02565b6040516101419190613c23565b60405180910390f35b34801561015657600080fd5b50610171600480360361016c919081019061378a565b611623565b60405161017f929190613c3e565b60405180910390f35b34801561019457600080fd5b506101af60048036036101aa919081019061378a565b611a55565b6040516101bc9190613c08565b60405180910390f35b3480156101d157600080fd5b506101ec60048036036101e7919081019061374e565b611e19565b6040516101fa929190613c3e565b60405180910390f35b34801561020f57600080fd5b5061021861224f565b604051610226929190613c3e565b60405180910390f35b34801561023b57600080fd5b506102566004803603610251919081019061378a565b6125f3565b604051610264929190613c3e565b60405180910390f35b60008060008060008093506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016103239190613d6f565b602060405180830381600087803b15801561033d57600080fd5b505af1158015610351573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061037591908101906136fc565b92508273ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156103db57600080fd5b505af11580156103ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104139190810190613681565b91508173ffffffffffffffffffffffffffffffffffffffff1663ae763db5876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161046a9190613e4f565b600060405180830381600087803b15801561048457600080fd5b505af1158015610498573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff166309ff42f06040805190810160405280600a81526020017f6669785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610528929190613d91565b602060405180830381600087803b15801561054257600080fd5b505af1158015610556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061057a9190810190613725565b905060018112151561058f57600093506105b3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe93505b7f20f837690ca1f35aa07d230609a95259b44ca770389085fd818685c0d16a8e9584876040516105e4929190613c97565b60405180910390a180945050505050919050565b6000806000806000806000945061060e8d611a55565b15156106a4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94507f8ef7162f3a3dcb46a71eec69908d5a8530aa63dda24b5dfa23c20f704e01b72c858e8e8e8e8e8e8e604051610674989796959493929190613cc7565b60405180910390a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550610df2565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161074f9190613d6f565b602060405180830381600087803b15801561076957600080fd5b505af115801561077d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107a191908101906136fc565b93508373ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561080757600080fd5b505af115801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061083f9190810190613681565b92508273ffffffffffffffffffffffffffffffffffffffff1663ae763db58e6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016108969190613ff1565b600060405180830381600087803b1580156108b057600080fd5b505af11580156108c4573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16635887ab246040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561092c57600080fd5b505af1158015610940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061096491908101906136d3565b91508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48d6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016109bb9190613e4f565b600060405180830381600087803b1580156109d557600080fd5b505af11580156109e9573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48c6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610a429190613ef9565b600060405180830381600087803b158015610a5c57600080fd5b505af1158015610a70573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610ac99190613f4e565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610b509190613ea4565b600060405180830381600087803b158015610b6a57600080fd5b505af1158015610b7e573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663def42698896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610bd79190613fa3565b600060405180830381600087803b158015610bf157600080fd5b505af1158015610c05573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610c5e919061407b565b600060405180830381600087803b158015610c7857600080fd5b505af1158015610c8c573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663664b37d6604080", "5190810160405280600a81526020017f6669785f69645f3030330000000000000000000000000000000000000000000081525084866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610d1e93929190613df1565b602060405180830381600087803b158015610d3857600080fd5b505af1158015610d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d709190810190613725565b9050600181121515610d855760009450610da9565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe94505b7f8ef7162f3a3dcb46a71eec69908d5a8530aa63dda24b5dfa23c20f704e01b72c858e8e8e8e8e8e8e604051610de6989796959493929190613cc7565b60405180910390a18095505b5050505050979650505050505050565b6000806000806000809350610e168c611a55565b15610eab577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93507f0541655c3d49a0dd0d71384602057b81c0c3233fa1a59e45789fbea68e500cb7848d8d8d8d8d8d8d604051610e7b989796959493929190613cc7565b60405180910390a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450611614565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610f569190613d6f565b602060405180830381600087803b158015610f7057600080fd5b505af1158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fa891908101906136fc565b92508273ffffffffffffffffffffffffffffffffffffffff16635887ab246040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561100e57600080fd5b505af1158015611022573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061104691908101906136d3565b91508173ffffffffffffffffffffffffffffffffffffffff16631a391cb46040805190810160405280600a81526020017f6669785f69645f303033000000000000000000000000000000000000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016110d29190614026565b600060405180830381600087803b1580156110ec57600080fd5b505af1158015611100573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48d6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016111599190613ff1565b600060405180830381600087803b15801561117357600080fd5b505af1158015611187573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48c6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016111e09190613e4f565b600060405180830381600087803b1580156111fa57600080fd5b505af115801561120e573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016112679190613ef9565b600060405180830381600087803b15801561128157600080fd5b505af1158015611295573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016112ee9190613f4e565b600060405180830381600087803b15801561130857600080fd5b505af115801561131c573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016113759190613ea4565b600060405180830381600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663def42698886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016113fc9190613fa3565b600060405180830381600087803b15801561141657600080fd5b505af115801561142a573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611483919061407b565b600060405180830381600087803b15801561149d57600080fd5b505af11580156114b1573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff16634c6f30c06040805190810160405280600a81526020017f6669785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611541929190613dc1565b602060405180830381600087803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115939190810190613725565b905060018114156115a757600093506115cb565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe93505b7f0541655c3d49a0dd0d71384602057b81c0c3233fa1a59e45789fbea68e500cb7848d8d8d8d8d8d8d604051611608989796959493929190613cc7565b60405180910390a18094505b50505050979650505050505050565b6000606060008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016116d79190613d6f565b602060405180830381600087803b1580156116f157600080fd5b505af1158015611705573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061172991908101906136fc565b92508273ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561178f57600080fd5b505af11580156117a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117c79190810190613681565b91508173ffffffffffffffffffffffffffffffffffffffff1663ae763db5876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161181e9190613ef9565b600060405180830381600087803b15801561183857600080fd5b505af115801561184c573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663d8ac59576040805190810160405280600a81526020017f6669785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016118dc929190613d91565b602060405180830381600087803b1580156118f657600080fd5b505af115801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061192e91908101906136aa565b90508073ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561199457600080fd5b505af11580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119cc9190810190613725565b60001415611a3a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000604051908082528060200260200182016040528015611a2a57816020015b6060815260200190600190039081611a155790505b5081915080905094509450611a4d565b6000611a4582612a25565b819150945094505b505050915091565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611b069190613d6f565b602060405180830381600087803b158015611b2057600080fd5b505af1158015611b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b5891908101906136fc565b92508273ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611bbe57600080fd5b505af1158015611bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611bf69190810190613681565b91508173ffffffffffffffffffffffffffffffffffffffff1663ae763db5866040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611c4d9190613ff1565b600060405180830381600087803b158015611c6757600080fd5b505af1158015611c7b573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663d8ac59576040805190810160405280600a81526020017f66", "69785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611d0b929190613d91565b602060405180830381600087803b158015611d2557600080fd5b505af1158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d5d91908101906136aa565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611dc557600080fd5b505af1158015611dd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611dfd9190810190613725565b1115611e0c5760019350611e11565b600093505b505050919050565b6000606060008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611ecd9190613d6f565b602060405180830381600087803b158015611ee757600080fd5b505af1158015611efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f1f91908101906136fc565b92508273ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611f8557600080fd5b505af1158015611f99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611fbd9190810190613681565b91508173ffffffffffffffffffffffffffffffffffffffff16633249273788886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612016929190613c6e565b600060405180830381600087803b15801561203057600080fd5b505af1158015612044573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663d8ac59576040805190810160405280600a81526020017f6669785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016120d4929190613d91565b602060405180830381600087803b1580156120ee57600080fd5b505af1158015612102573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061212691908101906136aa565b90508073ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561218c57600080fd5b505af11580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121c49190810190613725565b60001415612232577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600060405190808252806020026020018201604052801561222257816020015b606081526020019060019003908161220d5790505b5081915080905094509450612245565b600061223d82612a25565b819150945094505b5050509250929050565b600060606000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016123019190613d6f565b602060405180830381600087803b15801561231b57600080fd5b505af115801561232f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061235391908101906136fc565b91508173ffffffffffffffffffffffffffffffffffffffff1663d8ac59576040805190810160405280600a81526020017f6669785f69645f303033000000000000000000000000000000000000000000008152508473ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561240b57600080fd5b505af115801561241f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124439190810190613681565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161247c929190613d91565b602060405180830381600087803b15801561249657600080fd5b505af11580156124aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124ce91908101906136aa565b90508073ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061256c9190810190613725565b600014156125da577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60006040519080825280602002602001820160405280156125ca57816020015b60608152602001906001900390816125b55790505b50819150809050935093506125ed565b60006125e582612a25565b819150935093505b50509091565b6000606060008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280601a81526020017f646174615f7365745f6d656d6265725f7065726d697373696f6e0000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016126a79190613d6f565b602060405180830381600087803b1580156126c157600080fd5b505af11580156126d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126f991908101906136fc565b92508273ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561275f57600080fd5b505af1158015612773573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127979190810190613681565b91508173ffffffffffffffffffffffffffffffffffffffff1663ae763db5876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016127ee9190613ff1565b600060405180830381600087803b15801561280857600080fd5b505af115801561281c573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663d8ac59576040805190810160405280600a81526020017f6669785f69645f30303300000000000000000000000000000000000000000000815250846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016128ac929190613d91565b602060405180830381600087803b1580156128c657600080fd5b505af11580156128da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128fe91908101906136aa565b90508073ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561296457600080fd5b505af1158015612978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061299c9190810190613725565b60001415612a0a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60006040519080825280602002602001820160405280156129fa57816020015b60608152602001906001900390816129e55790505b5081915080905094509450612a1d565b6000612a1582612a25565b819150945094505b505050915091565b60608060008060608573ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612a9157600080fd5b505af1158015612aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ac99190810190613725565b604051908082528060200260200182016040528015612afc57816020015b6060815260200190600190039081612ae75790505b509350600092505b8573ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ba09190810190613725565b83121561331c578573ffffffffffffffffffffffffffffffffffffffff16633dd2b614846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612bfc9190613c23565b602060405180830381600087803b158015612c1657600080fd5b505af1158015612c2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c4e91908101906136d3565b9150612d40612d058373ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612ca990613fd1565b600060405180", "830381600087803b158015612cc357600080fd5b505af1158015612cd7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612d0091908101906137cb565b613328565b6040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613381565b9050612dfd81612df88473ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612d9c90613e2f565b600060405180830381600087803b158015612db657600080fd5b505af1158015612dca573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612df391908101906137cb565b613328565b613381565b9050612e3e816040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613381565b9050612efb81612ef68473ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612e9a90613ed9565b600060405180830381600087803b158015612eb457600080fd5b505af1158015612ec8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612ef191908101906137cb565b613328565b613381565b9050612f3c816040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613381565b9050612ff981612ff48473ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612f9890613f2e565b600060405180830381600087803b158015612fb257600080fd5b505af1158015612fc6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612fef91908101906137cb565b613328565b613381565b905061303a816040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613381565b90506130f7816130f28473ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161309690613e84565b600060405180830381600087803b1580156130b057600080fd5b505af11580156130c4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506130ed91908101906137cb565b613328565b613381565b9050613138816040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613381565b90506131f5816131f08473ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161319490613f83565b600060405180830381600087803b1580156131ae57600080fd5b505af11580156131c2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506131eb91908101906137cb565b613328565b613381565b9050613236816040805190810160405280600181526020017f7c00000000000000000000000000000000000000000000000000000000000000815250613381565b90506132f3816132ee8473ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016132929061405b565b600060405180830381600087803b1580156132ac57600080fd5b505af11580156132c0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506132e991908101906137cb565b613328565b613381565b905080848481518110151561330457fe5b90602001906020020181905250826001019250612b04565b83945050505050919050565b6060600061333583613552565b1415613378576040805190810160405280600181526020017f2000000000000000000000000000000000000000000000000000000000000000815250905061337c565b8190505b919050565b606080606080606060008088955087945084518651016040519080825280601f01601f1916602001820160405280156133c95781602001602082028038833980820191505090505b50935083925060009150600090505b855181101561348b5785818151811015156133ef57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561344e57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506133d8565b600090505b84518110156135435784818151811015156134a757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561350657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613490565b83965050505050505092915050565b600081519050919050565b6000613569825161417a565b905092915050565b600061357d825161418c565b905092915050565b6000613591825161419e565b905092915050565b60006135a582516141b0565b905092915050565b60006135b982356141c2565b905092915050565b60006135cd82516141c2565b905092915050565b600082601f83011215156135e857600080fd5b81356135fb6135f6826140dd565b6140b0565b9150808252602083016020830185838301111561361757600080fd5b6136228382846141f0565b50505092915050565b600082601f830112151561363e57600080fd5b815161365161364c826140dd565b6140b0565b9150808252602083016020830185838301111561366d57600080fd5b6136788382846141ff565b50505092915050565b60006020828403121561369357600080fd5b60006136a18482850161355d565b91505092915050565b6000602082840312156136bc57600080fd5b60006136ca84828501613571565b91505092915050565b6000602082840312156136e557600080fd5b60006136f384828501613585565b91505092915050565b60006020828403121561370e57600080fd5b600061371c84828501613599565b91505092915050565b60006020828403121561373757600080fd5b6000613745848285016135c1565b91505092915050565b6000806040838503121561376157600080fd5b600061376f858286016135ad565b9250506020613780858286016135ad565b9150509250929050565b60006020828403121561379c57600080fd5b600082013567ffffffffffffffff8111156137b657600080fd5b6137c2848285016135d5565b91505092915050565b6000602082840312156137dd57600080fd5b600082015167ffffffffffffffff8111156137f757600080fd5b6138038482850161362b565b91505092915050565b600080600080600080600060e0888a03121561382757600080fd5b600088013567ffffffffffffffff81111561384157600080fd5b61384d8a828b016135d5565b975050602088013567ffffffffffffffff81111561386a57600080fd5b6138768a828b016135d5565b965050604088013567ffffffffffffffff81111561389357600080fd5b61389f8a828b016135d5565b955050606088013567ffffffffffffffff8111156138bc57600080fd5b6138c88a828b016135d5565b945050608088013567ffffffffffffffff8111156138e557600080fd5b6138f18a828b016135d5565b93505060a06139028a828b016135ad565b92505060c088013567ffffffffffffffff81111561391f57600080fd5b61392b8a828b016135d5565b91505092959891949750929550565b600061394582614116565b8084526020840193508360208202850161395e85614109565b60005b84811015613997578383038852613979838351613a1a565b925061398482614137565b9150602088019750600181019050613961565b508196508694505050505092915050565b6139b181614164565b82525050565b6139c0816141cc565b82525050565b6139cf816141de565b82525050565b6139de81614170565b82525050565b60006139ef8261412c565b808452613a038160208601602086016141ff565b613a0c81614232565b602085010191505092915050565b6000613a2582614121565b808452613a398160208601602086016141ff565b613a4281614232565b602085010191505092915050565b6000600b82527f646174615f7365745f69640000000000000000000000000000000000000000006020830152604082019050919050565b6000600c82527f757064617465645f74696d6500000000000000000000000000000000000000006020830152604082019050919050565b6000600982527f6d656d6265725f696400000000000000000000000000000000000000000000006020830152604082019050919050565b6000600c82527f637265617465645f74696d6500000000000000000000000000000000000000006020830152604082019050919050565b6000600882527f6c6f675f74696d650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600282527f69640000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600682527f6669785f696400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600882527f6578745f6a736f6e0000000000000000000000000000000000000000000000006020830152604082019050919050565b6000602082019050613c1d60008301846139a8565b92915050565b6000602082019050613c3860008301846139d5565b92915050565b6000604082019050613c5360008301856139d5565b8181036020830152613c65818461393a565b90509392505050565b6000604082019050613c8360008301856139d5565b613c9060208301846139d5565b9392505050565b6000604082019050613cac60008301856139d5565b818103", "6020830152613cbe81846139e4565b90509392505050565b600061010082019050613cdd600083018b6139d5565b8181036020830152613cef818a6139e4565b90508181036040830152613d0381896139e4565b90508181036060830152613d1781886139e4565b90508181036080830152613d2b81876139e4565b905081810360a0830152613d3f81866139e4565b9050613d4e60c08301856139d5565b81810360e0830152613d6081846139e4565b90509998505050505050505050565b60006020820190508181036000830152613d898184613a1a565b905092915050565b60006040820190508181036000830152613dab8185613a1a565b9050613dba60208301846139b7565b9392505050565b60006040820190508181036000830152613ddb8185613a1a565b9050613dea60208301846139c6565b9392505050565b60006060820190508181036000830152613e0b8186613a1a565b9050613e1a60208301856139c6565b613e2760408301846139b7565b949350505050565b60006020820190508181036000830152613e4881613a50565b9050919050565b60006040820190508181036000830152613e6881613a50565b90508181036020830152613e7c81846139e4565b905092915050565b60006020820190508181036000830152613e9d81613a87565b9050919050565b60006040820190508181036000830152613ebd81613a87565b90508181036020830152613ed181846139e4565b905092915050565b60006020820190508181036000830152613ef281613abe565b9050919050565b60006040820190508181036000830152613f1281613abe565b90508181036020830152613f2681846139e4565b905092915050565b60006020820190508181036000830152613f4781613af5565b9050919050565b60006040820190508181036000830152613f6781613af5565b90508181036020830152613f7b81846139e4565b905092915050565b60006020820190508181036000830152613f9c81613b2c565b9050919050565b60006040820190508181036000830152613fbc81613b2c565b9050613fcb60208301846139d5565b92915050565b60006020820190508181036000830152613fea81613b63565b9050919050565b6000604082019050818103600083015261400a81613b63565b9050818103602083015261401e81846139e4565b905092915050565b6000604082019050818103600083015261403f81613b9a565b905081810360208301526140538184613a1a565b905092915050565b6000602082019050818103600083015261407481613bd1565b9050919050565b6000604082019050818103600083015261409481613bd1565b905081810360208301526140a881846139e4565b905092915050565b6000604051905081810181811067ffffffffffffffff821117156140d357600080fd5b8060405250919050565b600067ffffffffffffffff8211156140f457600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600061418582614144565b9050919050565b600061419782614144565b9050919050565b60006141a982614144565b9050919050565b60006141bb82614144565b9050919050565b6000819050919050565b60006141d782614144565b9050919050565b60006141e982614144565b9050919050565b82818337600083830152505050565b60005b8381101561421d578082015181840152602081019050614202565b8381111561422c576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820d9e5b8da4155ffc20fc476938c017cac116adf46737acab60aa68a7535e8e9916c6578706572696d656e74616cf50037"};

    public static final String SM_BINARY = String.join("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"constant\":true,\"inputs\":[{\"name\":\"member_id\",\"type\":\"string\"}],\"name\":\"selectByMemberId\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"},{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"}],\"name\":\"selectById\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"},{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"}],\"name\":\"isExist\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"startIndex\",\"type\":\"int256\"},{\"name\":\"endIndex\",\"type\":\"int256\"}],\"name\":\"selectByPage\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"},{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"selectAll\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"},{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"data_set_id\",\"type\":\"string\"},{\"name\":\"member_id\",\"type\":\"string\"},{\"name\":\"created_time\",\"type\":\"string\"},{\"name\":\"updated_time\",\"type\":\"string\"},{\"name\":\"log_time\",\"type\":\"int256\"},{\"name\":\"ext_json\",\"type\":\"string\"}],\"name\":\"update\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"data_set_id\",\"type\":\"string\"},{\"name\":\"member_id\",\"type\":\"string\"},{\"name\":\"created_time\",\"type\":\"string\"},{\"name\":\"updated_time\",\"type\":\"string\"},{\"name\":\"log_time\",\"type\":\"int256\"},{\"name\":\"ext_json\",\"type\":\"string\"}],\"name\":\"insert\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"data_set_id\",\"type\":\"string\"}],\"name\":\"deleteByDataSetId\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"ret_code\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"data_set_id\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"member_id\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"created_time\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"updated_time\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"log_time\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"ext_json\",\"type\":\"string\"}],\"name\":\"insertEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"ret_code\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"data_set_id\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"member_id\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"created_time\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"updated_time\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"log_time\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"ext_json\",\"type\":\"string\"}],\"name\":\"updateEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"ret_code\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"data_set_id\",\"type\":\"string\"}],\"name\":\"deleteByDataSetIdEvent\",\"type\":\"event\"}]"};

    public static final String ABI = String.join("", ABI_ARRAY);

    public static final String FUNC_SELECTBYMEMBERID = "selectByMemberId";

    public static final String FUNC_SELECTBYID = "selectById";

    public static final String FUNC_ISEXIST = "isExist";

    public static final String FUNC_SELECTBYPAGE = "selectByPage";

    public static final String FUNC_SELECTALL = "selectAll";

    public static final String FUNC_UPDATE = "update";

    public static final String FUNC_INSERT = "insert";

    public static final String FUNC_DELETEBYDATASETID = "deleteByDataSetId";

    public static final Event INSERTEVENT_EVENT = new Event("insertEvent",
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {
            }, new TypeReference<Utf8String>() {
            }, new TypeReference<Utf8String>() {
            }, new TypeReference<Utf8String>() {
            }, new TypeReference<Utf8String>() {
            }, new TypeReference<Utf8String>() {
            }, new TypeReference<Int256>() {
            }, new TypeReference<Utf8String>() {
            })
    );

    public static final Event UPDATEEVENT_EVENT = new Event("updateEvent",
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {
            }, new TypeReference<Utf8String>() {
            }, new TypeReference<Utf8String>() {
            }, new TypeReference<Utf8String>() {
            }, new TypeReference<Utf8String>() {
            }, new TypeReference<Utf8String>() {
            }, new TypeReference<Int256>() {
            }, new TypeReference<Utf8String>() {
            }));
    ;

    public static final Event DELETEBYDATASETIDEVENT_EVENT = new Event("deleteByDataSetIdEvent",
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {
            }, new TypeReference<Utf8String>() {
            }));
    ;

    protected DataSetMemberPermissionContract(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public Tuple2<BigInteger, List<String>> selectByMemberId(String member_id) throws ContractException {
        final Function function = new Function(FUNC_SELECTBYMEMBERID,
                Arrays.<Type>asList(new Utf8String(member_id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {
                }, new TypeReference<DynamicArray<Utf8String>>() {
                }));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, List<String>>(
                (BigInteger) results.get(0).getValue(),
                convertToNative((List<Utf8String>) results.get(1).getValue()));
    }

    public Tuple2<BigInteger, List<String>> selectById(String id) throws ContractException {
        final Function function = new Function(FUNC_SELECTBYID,
                Arrays.<Type>asList(new Utf8String(id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {
                }, new TypeReference<DynamicArray<Utf8String>>() {
                }));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, List<String>>(
                (BigInteger) results.get(0).getValue(),
                convertToNative((List<Utf8String>) results.get(1).getValue()));
    }

    public Boolean isExist(String id) throws ContractException {
        final Function function = new Function(FUNC_ISEXIST,
                Arrays.<Type>asList(new Utf8String(id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {
                }));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public Tuple2<BigInteger, List<String>> selectByPage(BigInteger startIndex, BigInteger endIndex) throws ContractException {
        final Function function = new Function(FUNC_SELECTBYPAGE,
                Arrays.<Type>asList(new Int256(startIndex),
                        new Int256(endIndex)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {
                }, new TypeReference<DynamicArray<Utf8String>>() {
                }));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, List<String>>(
                (BigInteger) results.get(0).getValue(),
                convertToNative((List<Utf8String>) results.get(1).getValue()));
    }

    public Tuple2<BigInteger, List<String>> selectAll() throws ContractException {
        final Function function = new Function(FUNC_SELECTALL,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {
                }, new TypeReference<DynamicArray<Utf8String>>() {
                }));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, List<String>>(
                (BigInteger) results.get(0).getValue(),
                convertToNative((List<Utf8String>) results.get(1).getValue()));
    }

    public TransactionReceipt update(String id, String data_set_id, String member_id, String created_time, String updated_time, BigInteger log_time, String ext_json) {
        final Function function = new Function(
                FUNC_UPDATE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(data_set_id),
                        new Utf8String(member_id),
                        new Utf8String(created_time),
                        new Utf8String(updated_time),
                        new Int256(log_time),
                        new Utf8String(ext_json)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void update(String id, String data_set_id, String member_id, String created_time, String updated_time, BigInteger log_time, String ext_json, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_UPDATE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(data_set_id),
                        new Utf8String(member_id),
                        new Utf8String(created_time),
                        new Utf8String(updated_time),
                        new Int256(log_time),
                        new Utf8String(ext_json)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUpdate(String id, String data_set_id, String member_id, String created_time, String updated_time, BigInteger log_time, String ext_json) {
        final Function function = new Function(
                FUNC_UPDATE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(data_set_id),
                        new Utf8String(member_id),
                        new Utf8String(created_time),
                        new Utf8String(updated_time),
                        new Int256(log_time),
                        new Utf8String(ext_json)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple7<String, String, String, String, String, BigInteger, String> getUpdateInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_UPDATE,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {
                }, new TypeReference<Utf8String>() {
                }, new TypeReference<Utf8String>() {
                }, new TypeReference<Utf8String>() {
                }, new TypeReference<Utf8String>() {
                }, new TypeReference<Int256>() {
                }, new TypeReference<Utf8String>() {
                }));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple7<String, String, String, String, String, BigInteger, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                (String) results.get(2).getValue(),
                (String) results.get(3).getValue(),
                (String) results.get(4).getValue(),
                (BigInteger) results.get(5).getValue(),
                (String) results.get(6).getValue()
        );
    }

    public Tuple1<BigInteger> getUpdateOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_UPDATE,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {
                }));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
        );
    }

    public TransactionReceipt insert(String id, String data_set_id, String member_id, String created_time, String updated_time, BigInteger log_time, String ext_json) {
        final Function function = new Function(
                FUNC_INSERT,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(data_set_id),
                        new Utf8String(member_id),
                        new Utf8String(created_time),
                        new Utf8String(updated_time),
                        new Int256(log_time),
                        new Utf8String(ext_json)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void insert(String id, String data_set_id, String member_id, String created_time, String updated_time, BigInteger log_time, String ext_json, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_INSERT,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(data_set_id),
                        new Utf8String(member_id),
                        new Utf8String(created_time),
                        new Utf8String(updated_time),
                        new Int256(log_time),
                        new Utf8String(ext_json)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForInsert(String id, String data_set_id, String member_id, String created_time, String updated_time, BigInteger log_time, String ext_json) {
        final Function function = new Function(
                FUNC_INSERT,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(data_set_id),
                        new Utf8String(member_id),
                        new Utf8String(created_time),
                        new Utf8String(updated_time),
                        new Int256(log_time),
                        new Utf8String(ext_json)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple7<String, String, String, String, String, BigInteger, String> getInsertInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_INSERT,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {
                }, new TypeReference<Utf8String>() {
                }, new TypeReference<Utf8String>() {
                }, new TypeReference<Utf8String>() {
                }, new TypeReference<Utf8String>() {
                }, new TypeReference<Int256>() {
                }, new TypeReference<Utf8String>() {
                }));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple7<String, String, String, String, String, BigInteger, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                (String) results.get(2).getValue(),
                (String) results.get(3).getValue(),
                (String) results.get(4).getValue(),
                (BigInteger) results.get(5).getValue(),
                (String) results.get(6).getValue()
        );
    }

    public Tuple1<BigInteger> getInsertOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_INSERT,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {
                }));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
        );
    }

    public TransactionReceipt deleteByDataSetId(String data_set_id) {
        final Function function = new Function(
                FUNC_DELETEBYDATASETID,
                Arrays.<Type>asList(new Utf8String(data_set_id)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void deleteByDataSetId(String data_set_id, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_DELETEBYDATASETID,
                Arrays.<Type>asList(new Utf8String(data_set_id)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForDeleteByDataSetId(String data_set_id) {
        final Function function = new Function(
                FUNC_DELETEBYDATASETID,
                Arrays.<Type>asList(new Utf8String(data_set_id)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getDeleteByDataSetIdInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_DELETEBYDATASETID,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {
                }));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
        );
    }

    public Tuple1<BigInteger> getDeleteByDataSetIdOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_DELETEBYDATASETID,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {
                }));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
        );
    }

    public List<InsertEventEventResponse> getInsertEventEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(INSERTEVENT_EVENT, transactionReceipt);
        ArrayList<InsertEventEventResponse> responses = new ArrayList<InsertEventEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            InsertEventEventResponse typedResponse = new InsertEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.ret_code = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.data_set_id = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.member_id = (String) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.created_time = (String) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.updated_time = (String) eventValues.getNonIndexedValues().get(5).getValue();
            typedResponse.log_time = (BigInteger) eventValues.getNonIndexedValues().get(6).getValue();
            typedResponse.ext_json = (String) eventValues.getNonIndexedValues().get(7).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeInsertEventEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(INSERTEVENT_EVENT);
        subscribeEvent(ABI, BINARY, topic0, fromBlock, toBlock, otherTopics, callback);
    }

    public void subscribeInsertEventEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(INSERTEVENT_EVENT);
        subscribeEvent(ABI, BINARY, topic0, callback);
    }

    public List<UpdateEventEventResponse> getUpdateEventEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(UPDATEEVENT_EVENT, transactionReceipt);
        ArrayList<UpdateEventEventResponse> responses = new ArrayList<UpdateEventEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            UpdateEventEventResponse typedResponse = new UpdateEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.ret_code = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.data_set_id = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.member_id = (String) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.created_time = (String) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.updated_time = (String) eventValues.getNonIndexedValues().get(5).getValue();
            typedResponse.log_time = (BigInteger) eventValues.getNonIndexedValues().get(6).getValue();
            typedResponse.ext_json = (String) eventValues.getNonIndexedValues().get(7).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeUpdateEventEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(UPDATEEVENT_EVENT);
        subscribeEvent(ABI, BINARY, topic0, fromBlock, toBlock, otherTopics, callback);
    }

    public void subscribeUpdateEventEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(UPDATEEVENT_EVENT);
        subscribeEvent(ABI, BINARY, topic0, callback);
    }

    public List<DeleteByDataSetIdEventEventResponse> getDeleteByDataSetIdEventEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(DELETEBYDATASETIDEVENT_EVENT, transactionReceipt);
        ArrayList<DeleteByDataSetIdEventEventResponse> responses = new ArrayList<DeleteByDataSetIdEventEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            DeleteByDataSetIdEventEventResponse typedResponse = new DeleteByDataSetIdEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.ret_code = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.data_set_id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeDeleteByDataSetIdEventEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETEBYDATASETIDEVENT_EVENT);
        subscribeEvent(ABI, BINARY, topic0, fromBlock, toBlock, otherTopics, callback);
    }

    public void subscribeDeleteByDataSetIdEventEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(DELETEBYDATASETIDEVENT_EVENT);
        subscribeEvent(ABI, BINARY, topic0, callback);
    }

    public static DataSetMemberPermissionContract load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new DataSetMemberPermissionContract(contractAddress, client, credential);
    }

    public static DataSetMemberPermissionContract deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(DataSetMemberPermissionContract.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }

    public static class InsertEventEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger ret_code;

        public String id;

        public String data_set_id;

        public String member_id;

        public String created_time;

        public String updated_time;

        public BigInteger log_time;

        public String ext_json;
    }

    public static class UpdateEventEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger ret_code;

        public String id;

        public String data_set_id;

        public String member_id;

        public String created_time;

        public String updated_time;

        public BigInteger log_time;

        public String ext_json;
    }

    public static class DeleteByDataSetIdEventEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger ret_code;

        public String data_set_id;
    }
}
